package View;

import java.text.DateFormat;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import Pojo.Aluno;
import Pojo.Atividade;
import Pojo.Nota;
import Pojo.Turma;
import Pojo.Professor;
import View.MenuAluno.Comparador;
import DAO.AtividadeDaoImplArquivo;
import DAO.TurmaDaoImplArquivo;

/** Classe de operações referentes às atividades.
*
* @author Ronan Lopes
* 
* */
public class MenuAtividade {

	/**
	 * Classe comparador para ordenar as atividades
	 * @author Ronan Lopes
	 *
	 */
	public class Comparador implements Comparator<Atividade>{
		/**
		 * Método de comparação que implementa o método de Comparator
		 */
		public int compare(Atividade atividade1, Atividade atividade2){
			return atividade1.getNome().compareTo(atividade2.getNome());
		}
	}
	
	/**Método para cadastro de atividades no sistema.
	 * 
	 * @param atividadeDao
	 * @param turmaDao
	 * @param professorAcesso
	 */
	public void cadastrarAtividades(AtividadeDaoImplArquivo atividadeDao, TurmaDaoImplArquivo turmaDao, Professor professorAcesso){
		System.out.println("-----Cadastrando Nova Atividade-----");
	
		//buscando a turma
		MenuTurma menuTurma = new MenuTurma();
		if (menuTurma.escolherTurmasAbertas(turmaDao, professorAcesso)>0){
			int idTurma = Console.readInteger();
			Turma turma = turmaDao.pesquisarPorId(idTurma);
			while ((turma==null)||(turma.getProfessor().getIdProfessor()!=professorAcesso.getIdProfessor())){
				System.out.println("Entrada inválida. Informe novamente:");
				idTurma = Console.readInteger();
				turma = turmaDao.pesquisarPorId(idTurma);
			}
			
			int continuar=1;
			while(continuar==1){
			
				int idAtividade = atividadeDao.getProximoId();
				
				System.out.println("Informe o nome da Atividade: ");
				String nome = Console.readString();
				
				System.out.println("Informe o tipo da Atividade: ");
				String tipo = Console.readString();
				
				System.out.println("Informe a data da Atividade: ");
				String str_date = Console.readString();
				Calendar data = Calendar.getInstance();
				try {  
		    		DateFormat formatter ; 
		    		Date date ; 
			    	formatter = new SimpleDateFormat("dd/MM/yyyy");
			    	date = (Date)formatter.parse(str_date); 
			    	data.setTime(date);
		    	} catch (ParseException e){
		    		System.out.println("Exception :"+e);  
		    	}
				
				System.out.println("Informe o valor da Atividade: ");
				double valor = Console.readDouble();
				
				List<Nota> listaNotas = new ArrayList<Nota>();		//Cria a lista de Notas vazia.
				
				Atividade novaAtividade = new Atividade(idAtividade,nome,tipo,data,valor,turma,listaNotas);
				atividadeDao.adicionarAtividade(novaAtividade);
				
				System.out.println("Deseja cadastrar mais uma Atividade para esta turma? (1-Sim, 0-Não)");
				continuar = Console.readInteger();
			}
		}else{
			System.out.println("Nenhuma turma cadastrada para este professor. Pressione Enter para continuar.");
			Console.readString();
		}
	}
	
	/**Listagem de atividades cadastradas.
	 * 
	 * @param atividadeDao
	 */
	public void listarAtividades(AtividadeDaoImplArquivo atividadeDao){
		System.out.println("---Lista de Atividades---");
		
		List<Atividade> listaAtividades = atividadeDao.getListaAtividade();
		Comparador comparador = new Comparador();
		Collections.sort(listaAtividades,comparador);
		
		Iterator<Atividade> i = listaAtividades.iterator();
		Atividade atividade;
		System.out.println("Nome | Tipo | Valor | Data | Ano | Período ");
		while(i.hasNext()){
			atividade = (Atividade) i.next();
			System.out.println(atividade.getNome() + " | " + atividade.getTipo() + " | "+ atividade.getValor() + " | " + atividade.getData().getTime() + " | " + atividade.getTurma().getAno() + " | " + atividade.getTurma().getPeriodo());
		}
		System.out.println("Pressione enter para retornar.");
		Console.readString();
	}
}
